第3章 语言基础(3)

操作符

递增/递减操作符: ++、--

可以作用于任何值(不限于整数),使用时遵循以下规则:

let s1 = "2";
let s2 = "z";
let b = false;
let f = 1.1;
let o = {
    valueOf() {
        return -1;
    }
};
s1++; // 值变成数值3
s2++; // 值变成NaN
b++; // 值变成数值 1
f--; // 值变成 0.10000000000000009(因为浮点数不精确) 
o--; // 值变成-2

一元加和减:+、-

如果符号放在数值类型的变量前面,则表示正、负,如果放在其他类型的变量前面,则按照上述规则进行类型转换

位操作符:与 &、或 |、非 ~、异或 ^、左移 <<、有符号右移 >>、无符号右移 >>>(略过,感兴趣自己看书上原文)

布尔操作符:逻辑非 !、逻辑与 &&、逻辑或 ||

逻辑非应用于任何数据类型,遵循以下规则:

逻辑非操作符也可以用于把任意值转换为布尔值,方法是同时使用两个叹号(!!),相当于调用了转型函数 Boolean()

逻辑与应用于任何数据类型,如果有操作数不是布尔值,则逻辑与并不 一定会返回布尔值,而是遵循如下规则:

与逻辑与类似,如果有一个操作数不是布尔值,那么逻辑或操作符也不一定返回布尔值。它遵循如下规则:

乘性操作符:乘 *、除 /、取模 %

乘法操作符在处理特殊值时也有一些特殊行为:

除法操作符与乘法类似,也有一些特殊行为:

与其他乘性操作符一样,取模操作符对特殊值也有一些特殊的行为:

指数操作符:**

// 平方
console.log(Math.pow(3, 2); // 9
console.log(3 ** 2); // 9
// 开平方
console.log(Math.pow(16, 0.5); // 4
console.log(16 ** 0.5); // 4

// 也可用赋值操作符实现
let squared = 3;
squared **= 2;
console.log(squared); // 9
let sqrt = 16;
sqrt **= 0.5;
console.log(sqrt); // 4

加性操作符:加 +、减 -

加法操作符执行加法运算并根据如下规则返回结果:

let result1 = 5 + 5;
console.log(result1); // 10

let result2 = 5 + "5";
console.log(result2); // "55"

let num1 = 5;
let num2 = 10;
let message = "The sum of 5 and 10 is " + num1 + num2;
console.log(message);  // "The sum of 5 and 10 is 510"

减法操作符与加法类似,也有一组规则用于处理特殊结果:

let result1 = 5 - true; // true被转换为1,所以结果是4
let result2 = NaN - 1; // NaN
let result3 = 5 - 3; // 2
let result4 = 5 - ""; // ""被转换为0,所以结果是5
let result5 = 5 - "2"; // "2"被转换为2,所以结果是3
let result6 = 5 - null; // null被转换为0,所以结果是5

关系操作符:大于 >、大于等于 >=、小于 <、小于等于 <=

用法跟数学里用法一样,这里只记录对于特殊数据类型的比较规则:

相等操作符:等于==、不等于!=、全等===、不全等!==

全等操作符与相等操作符类似,但是不转换操作数,不全等与之类似

let result1 = ("55" == 55); // true,转换后相等
let result2 = ("55" === 55); // false,数据类型不同

let result3 = (null == undefined); // true
let result4 = (null === undefined); // false

条件操作符:variable = boolean_expression ? true_value : false_value;

let max = (num1 > num2) ? num1 : num2;

赋值操作符

逗号操作符

可以用来在一条语句中执行多个操作

let num1 = 1, num2 = 2, num3 = 3;

在赋值时使用逗号操作符分隔值,最终会返回表达式中最后一个值

let num = (5, 1, 4, 8, 0); // num的值为0